﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace ControleEstoque.PDA
{
	public partial class Ativos : UserControl
	{
		public Ativos()
		{
			InitializeComponent();

			fabricanteAtivoBindingSource.DataSource = Program.CurrentService.FabricanteAtivo_GetData();
			tipoAtivoBindingSource.DataSource = Program.CurrentService.TipoAtivo_GetData();
		}

		public void RefreshData()
		{
			ControleEstoque.PDA.ControleEstoqueServices.ControleAtivoDataSet.AtivoDataTable ativos = Program.CurrentService.Ativo_GetDataWithFabricanteAtivoNomeAndTipoAtivoNome();

			this.ativoBindingSource.DataSource = ativos;
		}

		private void btnActions_InsertAction(object sender, EventArgs e)
		{
			try
			{
				if (this.tabControl1.SelectedIndex == 0)
				{
					if (GetFirstSelectedRow() > -1)
					{
						dgAtivos.UnSelect(GetFirstSelectedRow());
					}
					this.tabControl1.SelectedIndex = 1;
				}
				else
				{
					if (ValidateForm())
					{
						Program.CurrentService.Ativo_Insert((int)this.cbTipoAtivoId.SelectedValue, (int)this.cbFabricanteAtivoId.SelectedValue, this.txtAtivoNome.Text, this.txtAtivoRFID.Text);
						MessageBox.Show("Ativo cadastrado com sucesso.", "Sucesso");
						this.tabControl1.SelectedIndex = 0;
						RefreshData();
					}
					else
					{
						MessageBox.Show("Verique os dados requeridos e tente novamente.", "Erro");
					}
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Ocorreu um erro ao tentar cadastrar o ativo.", "Erro");
			}
		}

		private bool ValidateForm()
		{
			bool isValid = true;

			if (this.cbFabricanteAtivoId.SelectedIndex == -1)
			{
				this.lblFabricanteAtivoId.ForeColor = Color.Red;
				isValid = false;
			}
			else
			{
				this.lblFabricanteAtivoId.ForeColor = SystemColors.ControlText;
			}

			if (this.cbTipoAtivoId.SelectedIndex == -1)
			{
				this.lblTipoAtivoId.ForeColor = Color.Red;
				isValid = false;
			}
			else
			{
				this.lblTipoAtivoId.ForeColor = SystemColors.ControlText;
			}

			if (string.IsNullOrEmpty(this.txtAtivoNome.Text))
			{
				this.lblAtivoNome.ForeColor = Color.Red;
				isValid = false;
			}
			else
			{
				this.lblAtivoNome.ForeColor = SystemColors.ControlText;
			}

			if (string.IsNullOrEmpty(this.txtAtivoRFID.Text))
			{
				this.txtAtivoRFID.ForeColor = Color.Red;
				isValid = false;
			}
			else
			{
				this.txtAtivoRFID.ForeColor = SystemColors.ControlText;
			}

			return isValid;
		}

		private void ClearForm()
		{
			this.cbFabricanteAtivoId.SelectedIndex = -1;
			this.cbTipoAtivoId.SelectedIndex = -1;
			this.txtAtivoNome.Text = string.Empty;
			this.txtAtivoRFID.Text = string.Empty;
		}

		private void FillForm(ControleEstoque.PDA.ControleEstoqueServices.ControleAtivoDataSet.AtivoRow row)
		{
			this.lblAtivoId.Text = row.AtivoId.ToString();
			this.cbTipoAtivoId.SelectedValue = row.TipoAtivoId;
			this.cbFabricanteAtivoId.SelectedValue = row.FabricanteAtivoId;
			this.txtAtivoNome.Text = row.AtivoNome;
			this.txtAtivoRFID.Text = row.AtivoRFID;
		}

		private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
		{
			switch (tabControl1.SelectedIndex)
			{
				case 0:
					if (GetFirstSelectedRow() > -1)
					{
						btnActions.Mode = ButtonsMode.ListItemSelected;
					}
					else
					{
						this.btnActions.Mode = ButtonsMode.Listing;
					}
					break;
				case 1:
					if (GetFirstSelectedRow() > -1)
					{
						ControleEstoque.PDA.ControleEstoqueServices.ControleAtivoDataSet.AtivoDataTable ativoData = this.ativoBindingSource.DataSource as ControleEstoque.PDA.ControleEstoqueServices.ControleAtivoDataSet.AtivoDataTable;
						this.FillForm(ativoData[GetFirstSelectedRow()]);
						this.btnActions.Mode = ButtonsMode.Editing;
					}
					else
					{
						this.ClearForm();
						this.btnActions.Mode = ButtonsMode.Inserting;
					}
					break;
			}
		}

		int GetFirstSelectedRow()
		{
			for (int i = 0; i < ativoBindingSource.Count; i++)
			{
				if (dgAtivos.IsSelected(i))
				{
					return i;
				}
			}

			return -1;
		}

		private void dgAtivos_CurrentCellChanged(object sender, EventArgs e)
		{
			dgAtivos.Select(dgAtivos.CurrentRowIndex);
			ativoBindingSource.Position = dgAtivos.CurrentRowIndex;
			btnActions.Mode = ButtonsMode.ListItemSelected;
		}

		private void btnActions_EditAction(object sender, EventArgs e)
		{
			if (GetFirstSelectedRow() > -1)
			{
				this.tabControl1.SelectedIndex = 1;
			}
		}

		private void btnActions_UpdateAction(object sender, EventArgs e)
		{
			try
			{
				if (ValidateForm())
				{
					Program.CurrentService.Ativo_Update((int)this.cbTipoAtivoId.SelectedValue, (int)this.cbFabricanteAtivoId.SelectedValue, this.txtAtivoNome.Text, this.txtAtivoRFID.Text, int.Parse(this.lblAtivoId.Text));
					MessageBox.Show("Ativo atualizado com sucesso.", "Sucesso");
					this.tabControl1.SelectedIndex = 0;
					RefreshData();
				}
				else
				{
					MessageBox.Show("Verique os dados requeridos e tente novamente.", "Erro");
				}
			}
			catch (Exception ex)
			{
				MessageBox.Show("Ocorreu um erro ao tentar atualizar o ativo.", "Erro");
			}
		}

		private void btnActions_DeleteAction(object sender, EventArgs e)
		{
			try
			{
				ControleEstoque.PDA.ControleEstoqueServices.ControleAtivoDataSet.AtivoRow row = (ativoBindingSource.Current as DataRowView).Row as ControleEstoque.PDA.ControleEstoqueServices.ControleAtivoDataSet.AtivoRow;
				Program.CurrentService.Ativo_Delete(row.AtivoId);
				MessageBox.Show("Ativo excluído com sucesso.", "Sucesso");
				RefreshData();
			}
			catch (Exception ex)
			{
				MessageBox.Show("Ocorreu um erro ao tentar excluir o ativo.", "Erro");
			}
		}

		private void btnActions_ClearAction(object sender, EventArgs e)
		{
			ClearForm();
		}

		private void btnActions_CancelAction(object sender, EventArgs e)
		{
			this.tabControl1.SelectedIndex = 0;
		}
	}
}
